/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2006                                 |
|   \\  /    A nd           | Website:  www.openfoam.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      snappyRefineMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// Surface to keep to
surface         "plexi.obj";

// What is outside. These points have to be inside a cell (so not on a face!)
outsidePoints   ((-0.99001 -0.99001 -0.99001));

//
// Selection of cells to refine
//

// If smallest edge of mesh > maxEdgeLen select all cut cells for refinement.
// If < maxEdgeLen select only those cut cells which are closer than
// curvatureDistance to surface
// and with cos of angle between normals on surface < curvature.
maxEdgeLen          0.1;
curvatureDistance   1.0;
curvature           0.9;

// if > 0: Remove inside cells at every step. Inside is given by number of
// layers separating outside from inside.
// (note that we cannot remove outside
// cells since these contain the outsidePoints)
// Do not use this option if you want mesh to spill through a hole which is
// not visible on the coarsest level but only becomes visible after refinement
nCutLayers 2;

// Refine until smallest edge of mesh < minEdgeLen
minEdgeLen      0.1;

// Or until the number of cells would become more than (stops one level before
// this)
cellLimit       2500000;

//
// Selection of final set
//

// Select based on side of surface. Usually select inside cells and project
// outwards or select outside cells and project inwards.
selectCut       false;
selectInside    false;
selectOutside   true;
// Leave out cell closer than nearDistance to the surface. Usually
// 0.5*minEdgeLen. Set to -1 to disable.
nearDistance    -1;

// Some cells on the surface of the selected cells might have all their
// points on the 'outside'. These would get flattened when projecting so
// are either kept and refined (selectHanging) or removed from the set
selectHanging   false;

//
// Refinement parameters
//

// Type of coordinate system
coordinateSystem global;
//coordinateSystem patchLocal;

// .. and its coefficients. x,y in this case. (normal = tan1^tan2)
globalCoeffs
{
    tan1 (1 0 0);
    tan2 (0 1 0);
}

patchLocalCoeffs
{
    patch outside;  // Normal direction is facenormal of zero'th face of patch
    tan1 (1 0 0);

}

// List of directions to refine
directions
(
    tan1
    tan2
    normal
);

// refinement level difference between neighbouring cells. Set to large if
// there is no need for a limit.
splitLevel      2;

// Cut purely geometric (will cut hexes through vertices) or take topology
// into account.
geometricCut    false;

// Whether to use hex topology. This will never cut hex through vertices.
useHexTopology  yes;

// Write meshes from intermediate steps
writeMesh       true;

// ************************************************************************* //
